package com.hqu.environment.utils;

import java.util.HashMap;
import java.util.Map;

/**
 * @Description: 自定义result，包含状态码，成功信息及需要携带的数据，用于抛出异常或者返回结果
 *
 * @Author: 邓勇嘉
 * @Date:2018/11/19 18:12
 * */
public class Result<T> {
    /*
    * 状态码
    * */
    private int code;
    /*
    * 信息
    * */
    private String message;

    /*
    * 返回需要的值
    * */
    private Map<String,Object> result = new HashMap<String,Object>();

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Map<String, Object> getResult() {
        return result;
    }

    public void setResult(Map<String, Object> result) {
        this.result = result;
    }



    /**
     * 返回失败状态码和信息
     *
     */
    public static Result success(){
        Result r=new Result();
        r.setCode(200);
        r.setMessage("处理成功");
        return r;
    }

    /**
     * 返回成功状态码和信息
     *
     * @param code 状态码
     * @param message 成功信息
     * @return  r 结果信息
     */
    public static Result success(int code,String message){
        Result r=new Result();
        r.setCode(code);
        r.setMessage(message);
        return r;
    }


    /**
     * 返回失败状态码和信息
     *
     */
    public static Result fail(){
        Result r=new Result();
        r.setCode(500);
        r.setMessage("处理失败");
        return r;
    }

    /**
     * 返回失败状态码和信息
     *
     * @param code 状态码
     * @param message 成功信息
     * @return  r 结果信息
     */
    public static Result fail(int code,String message){
        Result r=new Result();
        r.setCode(code);
        r.setMessage(message);
        return r;
    }

    public static Result fail(ExceptionCode exceptionCode) {
        Result r=new Result();
        r.setCode(exceptionCode.getCode());
        r.setMessage(exceptionCode.getMessage());
        return r;
    }

    public Result add(String key, Object value){
        this.getResult().put(key,value);
        return this;
    }
}
